package cn.wbnull.springbootdemo.config;

import cn.wbnull.springbootdemo.boot.CorsProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/*
 * @Author:大力王
 * @Date:2025/6/28-28-16:03
 * 开始了
 */
@Configuration
@EnableWebMvc
@RequiredArgsConstructor
public class CorsGlobalConfig implements WebMvcConfigurer {
    private final CorsProperties corsProperties;

    /**
     * 允许跨域访问的源
     * 设置跨域请求的白名单来源、方法、头部、凭证支持和缓存时间等策略。
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 对所有 /boot/** 路径下的接口，
        // 根据配置类 CorsProperties 中定义的参数，
        // 设置跨域请求的白名单来源、方法、头部、凭证支持和缓存时间等策略。
        registry.addMapping("/boot/**")
            .allowedOrigins(corsProperties.getAllowedOrigins().toArray(new String[0]))
            .allowedMethods(corsProperties.getAllowedMethods().toArray(new String[0]))
            .allowedHeaders(corsProperties.getAllowedHeaders().toArray(new String[0]))
            .exposedHeaders(corsProperties.getExposedHeaders().toArray(new String[0]))
            .allowCredentials(corsProperties.getAllowCredentials())
            .maxAge(corsProperties.getMaxAge());
    }
}
